package com.ruibo.modules.system.service;

import com.ruibo.modules.system.criteria.MenuQueryCriteria;
import com.ruibo.modules.system.domain.vo.TreeSelect;
import com.ruibo.modules.system.service.dto.RoleSmallDto;
import com.ruibo.modules.system.service.dto.SysMenuDto;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * (SysMenu)表服务接口
 *
 * @author sunfeng
 * @since 2020-04-17 15:01:44
 */
public interface SysMenuService {


    /**
     * 查询全部数据
     * @param criteria 条件
     * @param isQuery /
     * @throws Exception /
     * @return /
     */
    List<SysMenuDto> queryAll(MenuQueryCriteria criteria, boolean isQuery) throws Exception ;
   /**
     * 根据ID查询
     * @param menuId /
     * @return /
     */
    SysMenuDto queryById(Long menuId);

       /**
     * 创建
     * @param sysMenu /
     * @return /
     */
    SysMenuDto insert(SysMenuDto sysMenu);
    /**
     * 跟新
     * @param sysMenu /
     * @return /
     */
    SysMenuDto update(SysMenuDto sysMenu);
       /**
     * 根据id删除
     * @param menuId /
     * @return /
     */
    boolean deleteById(Long menuId);
        /**
     * 查询所有
     * @return /
     */
     List<SysMenuDto> findAll();

    Collection<? extends String> selectMenuPermsByUserId(Long userId);
    /**
     * 根据角色查询
     * @param roles /
     * @return /
     */
    List<SysMenuDto> findByRoles(List<RoleSmallDto> roles);

    /**
     * 将菜单列表转换成菜单树
     * @param menuDtoList
     * @return
     */
    Map<String,Object> buildTree(List<SysMenuDto> menuDtoList);
    /**
     * 构建菜单组件
     * @param menuDtos /
     * @return /
     */
    Object buildMenus(List<SysMenuDto> menuDtos);


    /**
     * 构建前端所需要下拉树结构
     *
     * @param menus 菜单列表
     * @return 下拉树结构列表
     */
    public List<TreeSelect> buildMenuTreeSelect(List<SysMenuDto> menus);

    /**
     *  根据父id获取菜单列表
     * @param pid
     * @return
     */
    List<SysMenuDto> findByPid(long pid);

 /**
  *  将菜单列表组装成菜单树
  * @param menus
  * @return
  */
   List<SysMenuDto> getMenuTree(List<SysMenuDto> menus);

 /**
  * 根据角色id获取菜单列表
  * @param roleId
  * @return
  */
   List<SysMenuDto> selectMenuListByRoleId(Long roleId);


    void deleteMenuByIds(Long[] menuIds);
}
